package com.xjh.basestudy.lanqiaobei;

import java.util.Arrays;
import java.util.Scanner;


public class Real {
    public static void main(String[] args) {
//        a();
//        b();
//        C();
//        D();
//        E();
        F();
    }

    /**
     * 为了让大家适应新赛制，赛前组委会特地安排了一场模拟赛，并计划根据模拟赛排名帮大家组建学习小组。
     * 模拟赛后，组委会随机选择一个排名区间 [L,R]（包含 L 和 R）。在这个区间内，如果两位选手的排名分别是 a 和 b（aa小于 b），
     * 并且满足 a 的 b 次方和 b 的 a 次方模 8 同余（即 ab≡ba(mod8)，那么这两位选手将被视为“代码知音”，组成学习小组，共同备战蓝桥杯。一位选手可以和多位选手成为“代码知音”。
     * 现在，组委会已经选定了排名区间 [L,R]，请你编写一个程序，帮助组委会计算该区间内“代码知音”的对数。为了避免数字过大，最终结果请对 10的9次方+7 取模。
     */
    public static void a() {
        long N = (long) 1e9 + 7;  // 取模用的常数 10^9 + 7，防止结果溢出
        Scanner scan = new Scanner(System.in);
        long n = scan.nextLong();  // 需要处理的测试组数

        while (n != 0) {
            long l = scan.nextLong(), r = scan.nextLong();  // 区间 [l, r]
            long ans = 0;
            long x, y, d;

            // 枚举模 8 下余数为 1, 3, 5, 7 的情况（即 t=1,3,5,7）
            for (int t = 1; t <= 7; t += 2) {
                // 找到区间内所有 ≡ t (mod 8) 的数
                x = (l - t + 7) / 8;  // 向上取整得到起始倍数
                y = (r - t) / 8;      // 向下取整得到结束倍数
                d = (y - x + 1) % N;  // 该模值的数有多少个
                d = (d * (d - 1) / 2) % N;  // 从这些数中选两个 (a,b)，组合数公式 C(d,2)
                ans = (ans + d) % N;
            }

            // 特判 a = 1 或 2 的情况（1^x ≡ x^1 (mod 8) 有额外规律）
            if (l <= 2) {
                y = r / 4;  // 满足 ab ≡ ba (mod 8) 的额外情况（详见规律分析）
                ans = (ans + y) % N;
            }

            // 特判 a = 4 及更大时的一些组合（a 偶数、b 奇数时可能成立）
            x = (Math.max(4, l) + 1) / 2;  // 从 4 开始，向上取整，限制 a 最小值
            y = r / 2;  // b 为偶数
            d = (y - x + 1) % N;
            d = (d * (d - 1) / 2) % N;
            ans = (ans + d) % N;

            System.out.println(ans);
            n--;
        }

        scan.close();
    }

    public static void b() {
        long end = 2024041331404202L;
        long count = 0;
        for (long i = 1; i <= end; i++) {
            // 直接使用公式计算 A(i)
            long an = (i * (i + 1)) / 2;
            long bn = 1;
            for (int j = 1; j <= i; j++) {
                bn = (bn * j) % 100;  // 阶乘每一步取模 100，避免大数溢出
            }
            if ((an - bn) % 100 == 0) {
                count++;
            }

        }
        System.out.println(count);

    }

    public static void C() {
        /**封闭图形个数*/
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt(); // 第一行输入数字个数
        int[][] arr = new int[n][2]; //二维数组：行数代表数字个数，
        for (int i = 0; i < n; i++) {
            arr[i][0] = qsbs(arr[i][1]); // 第一列是该数字的封闭图形个数
            arr[i][1] = scan.nextInt();  // 第二列是原始数字
        }
//        排序，第一规则是封闭图形个数，第二规则比较数字大小
//        若封闭图形数不同，则按封闭图形个数升序排列；
//若封闭图形数相同，则按原始数字大小升序排列。
//        a[0]	当前数字的“封闭图形数量”
//          a[1]	当前的原始数字本身
        Arrays.sort(arr, (a, b) -> a[0] == b[0] ? a[1] - b[1] : a[0] - b[0]);
//        按顺序输出数字
        for (int i = 0; i < n; i++) {
            System.out.print(arr[i][1] + " ");
        }
        scan.close();

    }

    // 计算数字的封闭图形个数
    public static int qsbs(int a) {
        int[] arr = {1, 0, 0, 0, 1, 0, 1, 0, 2, 1}; // 封闭图形数对应各数字
        int temp = 0;
        while (a > 0) {
            temp += arr[a % 10]; // 累加个位数对应的封闭图形数
            a /= 10;             // 去掉个位，处理下一个数字
        }
        return temp;
    }

    /**
     * 小蓝组织了一场算法交流会，总共有50人参加了本次会议。在会议上，大家进行了握手交流。按照惯例他们每个人都要与自己以外的其他所有人进行一次握手（且仅有一次）。
     * 但是有7个人，这7人彼此之间没有进行握手（但这7人与除这7人以外的所有人进行了握手）。请问这些人之间一共进行了多少次握手？
     * 注意 A 和 B 握手的同时也意味着 B 和 A 握手了，所以计算作一次握手。
     */
    public static void D() {
        int sum = 0;
        for (int i = 7; i <= 49; i++) {
            sum += i;

        }
        System.out.println(sum);

//        faer
        int totalPeople = 50;  // 总人数
        int noHandshakePeople = 7;  // 不握手的人数

        // 计算总的握手次数（不考虑限制）
        int totalHandshakes = totalPeople * (totalPeople - 1) / 2;

        // 计算不握手的7个人之间的握手次数
        int noHandshakeHandshakes = noHandshakePeople * (noHandshakePeople - 1) / 2;

        // 计算结果：减去不握手的7人之间的握手次数
        int result = totalHandshakes - noHandshakeHandshakes;

        System.out.println("总的握手次数为: " + result);

    }

    public static void E() {
        /**
         * 根据您提供的题目，描述了一种浮点数的表示方法，具体要求将浮点数转换为特定的格式 R 格式。题目中有以下要点：
         *
         * 需要将浮点数 d 转换为 R 格式的整数。
         *
         * 转换规则：将输入的浮点数乘以 2^n，然后保留整数部分并输出。
         *
         * 输入包括一个整数 n 和一个浮点数 d。
         *
         * 输出是将浮点数转换成指定格式后的整数。
         *
         * */
        System.out.println((int) 12.9111);
        Scanner scanner = new Scanner(System.in);
        // 读取输入

        int n = scanner.nextInt();

        double d = scanner.nextDouble();
        // 计算转换结果
        double result = d * Math.pow(2, n);
        // 输出转换后的整数部分
        System.out.println(Math.round(result));

    }
    /**
     * 有一个长度为 n的数组（nn是 10 的倍数），每个数 ai 都是区间 [0,9]中的整数。
     * 小明发现数组里每种数出现的次数不太平均，而更改第 i 个数的代价为 bi ，他想更改若干个数的值使得这 10种数出现的次数相等（都等于 n/10 ），请问代价和最少为多少。
     *
     *
     * */
    public static void F() {

    }

}

